展开描述
本 crate 提供用于表示 X.509 证书、密钥及其他在 rustls 生态中常用的类型。它面向那些需要处理这些 X.509 类型的 crate, 例如 rustls、rustls-webpki 等。
这些 crate 中有一些原本围绕 DER 编码字节定义了自己的简单包装类型。 然而,为了避免产生不便的依赖关系,所有这些包装类型都已被解耦。 通过使用一个长期 API 稳定的公共底层 crate,我们希望在避免不必要依赖关系弊病的同时,为各 crate 之间提供良好的互操作性。
§
本 crate 中定义的许多类型都表示 DER 编码数据。DER 是 ASN.1 格式的二进制编码,在 Web PKI 规范中被广泛使用。 作为一种二进制格式,它在内存中存储时相当紧凑。 但由于是二进制格式,对人类阅读以及在不便处理二进制的场景中使用并不友好。 因此,许多工具和协议采用一种称为 PEM 的基于 ASCII 的 DER 编码方式。 除了 base64 编码的 DER 之外,PEM 对象还通过头部和尾部行定界,标明该 PEM 数据块中所包含对象的类型。
这些类型可通过以下方式创建:
- DER using (for example)
PrivatePkcs8KeyDer::from(). - PEM using (for example)
pem::PemObject::from_pem_slice().
pem::PemObject 特性提供了从 PEM 编码构造这些类型的完整方式。
包括从文件、字节切片,或从 std::io 流中读取并构造。
还提供了一个更底层的 API,可一次性完整消费给定的 PEM 文件,
即使其中包含不同的数据类型:见 pem::PemObject 特性在 (pem::SectionKind, Vec<u8>) 元组上的实现。
§
本 crate 不提供创建新证书或密钥的功能。不过,可以使用 rcgen crate 来创建新的证书和密钥。
§
本 crate 故意不为私钥类型实现 Clone,
以最大程度地减少私钥数据在内存中的暴露。
若希望延长 PrivateKeyDer<'_> 的生命周期,可考虑使用 PrivateKeyDer::clone_key()。
另外,由于这些类型是不可变的,也可以考虑将 PrivateKeyDer<'_> 包装在 Rc 或 Arc 中。
§Target wasm32-unknown-unknown with the web feature
std::time::SystemTime 在 wasm32-unknown-unknown 目标中不可用,
因此对 UnixTime::now() 的调用——通常由 std feature 启用——
需要改为启用 web feature 后再编译。
该实现通过在浏览器中调用 Date.now() 来获取时间。
再导出§
pub use alg_id::AlgorithmIdentifier;
模块§
结构体§
- Addr
Parse Error - 解析 IP 地址失败
- Certificate
Der - DER 编码的 X.509 证书;按 RFC 5280 规定
- Certificate
Revocation List Der - 一个证书吊销列表(CRL),如 RFC 5280 所规定
- Certificate
Signing Request Der - 一个证书签名请求(CSR),如 RFC 2986 所规定
- Der
- DER 编码的数据,可以是 owned 或 borrowed
- DnsName
- 一个封装字符串(借用或拥有)的类型,其内容在语法上是合法的 DNS 名。
- EchConfig
List Bytes - TLS 编码的 Encrypted Client Hello (ECH) 配置列表(ECHConfigList);按 RFC 9849 §4 规定
- Invalid
DnsName Error - 提供的输入无法解析,因为它不是语法上合法的 DNS 名。
- Invalid
Signature - 签名无效时返回的、无详细信息的错误。
- Ipv4
Addr no_std 实现的 std::net::Ipv4Addr。- Ipv6
Addr no_std 实现的 std::net::Ipv6Addr。- Private
Pkcs1 KeyDer - DER 编码的明文 RSA 私钥;按 PKCS#1/RFC 3447 规定
- Private
Pkcs8 KeyDer - DER 编码的明文私钥;按 PKCS#8/RFC 5958 规定
- Private
Sec1 KeyDer - 一个 Sec1 编码的明文私钥,如 RFC 5915 所规定
- Subject
Public KeyInfo Der - DER 编码的 SubjectPublicKeyInfo (SPKI),按 RFC 5280 规定。
- Trust
Anchor - 一个信任锚(即根 CA)
- Unix
Time - 一个时间戳,记录自 Unix 纪元以来的非闰秒数。
枚举§
- Fips
Status - 算法或实现的 FIPS 验证状态。
- IpAddr
no_std 实现的 std::net::IpAddr。- Private
KeyDer - DER 编码的 X.509 私钥,格式为其中之一
- Server
Name - 编码客户端可以知道服务端预期名称的方式。
特性§
- Signature
Verification Algorithm - 一个抽象的签名验证算法。
类型别名§
- Subject
Public KeyInfo Deprecated - DER 编码的 SubjectPublicKeyInfo (SPKI),按 RFC 5280 规定。